package com.cskaoyan.javase.oop1._16access._4why;

/**
 * 给类或者类中结构加上访问权限，就相当于给房子加锁，没有钥匙（没有访问权限）就进不去（访问不到）
 * 但以上说的是正常情况
 * 房子的锁是可以撬开，是可以强行打破的，同样的访问权限符也不是绝对不可破解的。
 * 比如Java自身就提供了反射的特性，反射是可以破解访问权限的。
 *
 * 访问权限修饰符的使用，还具有一些额外的作用：
 *      1.对代码的使用者
 *          访问权限的使用，最基本的，自然是用来控制访问权限的
 *              语法上强制明确使用者哪里可以用，哪里不行。
 *          但也隐含了警告和暗示的作用：
 *              告诉代码的使用者，哪些地方不要触碰，哪些地方应该使用。
 *              起到警告、约束和指导代码使用者的功能。
 *          具体来说就是代码使用者不应该触碰,不应该关注,不应该使用的地方,应该使用私有的访问权限(或者不给相应的权限)
 *          对代码使用者,应该关注,应该使用的地方,应该使用public(或者给相应的权限)
 *          举例来说:
 *              a.代码使用者不应该触碰的代码,私有化
 *                  1.工具类,方法全部都是静态方法,实现功能时,不需要创建对象,所以干脆禁止创建对象.——私有化构造器
 *                      所有工具类都必须私有化构造器
 *                  2.(常见)中间过程方法私有化
 *                  3.工厂设计模式、单例的设计模式等等。
 *                      它们都需要私有化构造器
 *              b.代码使用者应该触碰的代码,提供相应的访问权限
 *
 *      2.对代码的开发者
 *          私有的，或者对外界不可见部分的代码，叫做隐藏代码的具体实现细节，可以很方便的修改代码实现。
 *
 * @since 14:27
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // new Arrays();
        test();
    }

    // test方法是需要对外提供功能实现的方法,该方法应该public修饰
    public static void test() {
        // test2这个方法是实现test方法的中间过程方法，它仅对test方法有意义
        test2();
    }

    // Access can be private
    private static void test2() {
    }
}
